home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 26 / AACD 26.iso / AACD / Programming / SNMA / arexx / snma.ced < prev    next >
Encoding:
Text File  |  2001-07-29  |  3.4 KB  |  172 lines

  1. /* SNMA to CED interface by MM $VER: 1.3
  2.  
  3. Usage:
  4. - with OBJECT argument - assemble as o. linkable file
  5. - with DEBUG argument - assemble as executable with symbol data hunk
  6. - without argument (default) - assemble as normal executable
  7. */
  8.  
  9. VARSAVE = "ENV:SNMA_Save.dir" /* directory of last assembled file */
  10. RECENT = "Actual:assem/SNMA_Recent.file" /* path of recently assembled source */
  11. SNMAL = "Utilities:Dock/Debug/SNMA" /* location of SNMA */
  12.  
  13. OPTIONS RESULTS
  14. ADR = address()
  15.  
  16. arg MODE
  17.  
  18. retc=20
  19. temp=0
  20.  
  21. SIGNAL ON SYNTAX
  22. SIGNAL ON BREAK_C
  23. SIGNAL ON HALT
  24.  
  25. LOCKGUI
  26. STATUS RESTNAME
  27. FN=RESULT
  28. STATUS NUMCHANGES
  29. CI=RESULT
  30. IF FN = "" THEN SIGNAL .load
  31. STATUS FILENAME
  32. SN = RESULT
  33.  
  34. .main:
  35. PUBS = "" /* set default pubscreen to empty string */
  36. STATUS PUBSCREENNAME
  37. IF RESULT = 0 THEN SIGNAL .skip
  38. PUBS=RESULT
  39.  
  40. .skip:
  41. TAGZ='rt_pubscrname='PUBS 'rt_reqpos=reqpos_centerscr'
  42.  
  43. IF SHOW('L',"rexxreqtools.library") THEN SIGNAL .lib_ok
  44. call addlib('rexxreqtools.library',0,-30,0)
  45.  
  46. .lib_ok:
  47. IF EXISTS(VARSAVE) = ~0 THEN
  48.     DO
  49.         CALL OPEN(.dir, VARSAVE, 'R')
  50.         SAVEDIR = readln(.dir)
  51.         CALL CLOSE(.dir)
  52.     END
  53. ELSE SAVEDIR = "T:" /* default directory for assembled files */
  54.  
  55. IF CI > 0 THEN SIGNAL .save
  56.  
  57. SUFIX=LASTPOS('.',FN)
  58. IF SUFIX = 0 THEN SIGNAL .req
  59. EXE=DELSTR(FN,SUFIX)
  60.  
  61. .req:
  62. IF MODE = "OBJECT" THEN EXE=INSERT(EXE,'.o')
  63.  
  64. .req2:
  65. FN2=rtfilerequest(SAVEDIR , EXE , "Save executable:", , TAGZ,)
  66. IF FN2 = "" THEN
  67.     DO
  68.     'OKAY1 Assembling cancelled!' ; SIGNAL .exit
  69.     END
  70.  
  71. PATH = LASTPOS('/',FN2)
  72. IF PATH = 0 THEN PATH = INDEX(FN2,':')
  73. IF PATH = 0 THEN SIGNAL .exit
  74. PATH = PATH+1
  75. PATH = DELSTR(FN2,PATH)
  76.  
  77. CALL OPEN(.dir, VARSAVE, 'W')
  78. CALL writeln(.dir, PATH)
  79. CALL CLOSE(.dir)
  80.  
  81. ADDRESS COMMAND 'Run "'SNMAL'" AREXX PORTNAME SNMA<->CED'
  82. ADDRESS COMMAND 'SYS:Rexxc/WaitForPort SNMA<->CED'
  83. ADDRESS 'SNMA<->CED'
  84.  
  85. 'SET OF=ON' /* enable msg output */
  86.  
  87. /* if DEBUG arg present, assemble with debug info */
  88.  
  89. IF MODE = "DEBUG" THEN 'SET S=ON'
  90.  
  91. /* if OBJECT arg present, assemble as object linkable file */
  92.  
  93. IF MODE = "OBJECT" THEN 'SET EXE=OFF S=ON'
  94. ELSE 'SET EXE=ON'
  95.  
  96. 'ASM "'SN'" O "'FN2'"'
  97.  
  98. INFO A
  99. IF A.ERRORS > 0 THEN
  100.     DO
  101.     GETERR STEM E
  102.     ADDRESS VALUE ADR
  103.     IF E.FILENAME = 'user macro' THEN
  104.         DO
  105.         'OKAY1 Error in macro file 'E.FILENAME'' ; SIGNAL .out
  106.         END
  107.     JUMPTO E.LINENUM E.COLUMN
  108.     'OKAY1 'E.ERRNUM'/'A.ERRORS': "'E.ERRTXT'"'
  109.     END
  110.  
  111. .out:
  112. ADDRESS 'SNMA<->CED' QUIT
  113. /*IF temp ~= 0 THEN
  114.     ADDRESS COMMAND 'DELETE "'temp'" QUIET'*/
  115. retc = 0 ; SIGNAL .exit
  116.  
  117. .load:
  118. IF CI > 0 THEN SIGNAL .save
  119.     IF EXISTS(RECENT) ~= 0 THEN
  120.         DO
  121.         CALL OPEN(.recent, RECENT, 'R')
  122.         SN = readln(.recent)
  123.         CALL CLOSE(.recent)
  124.         IF EXISTS(SN) = ~0 THEN SIGNAL .load2
  125.             'OKAY1 ERROR!: Cannot locate source file "'SN'"'; SIGNAL .exit
  126.  
  127.             .load2:
  128.             OPEN SN ; retc = 0 ; SIGNAL .exit
  129.         END
  130.     ELSE 'OKAY1 ERROR!: Recent file not found!' ; SIGNAL .exit
  131.  
  132.  
  133. .save:
  134. 'OKAY2 Source file not saved! Save it?'
  135. IF RESULT = 0 THEN SIGNAL .stemp
  136.     SAVE
  137.     IF RESULT = 0 THEN SIGNAL .save
  138.         STATUS FILENAME
  139.         SN = RESULT
  140.         IF EXISTS(RECENT) = 0 THEN SIGNAL .write
  141.         CALL OPEN(.recent, RECENT, 'R')
  142.         RF = readln(.recent)
  143.         CALL CLOSE(.recent)
  144.         IF SN=RF THEN SIGNAL .skip2
  145. .write:        CALL OPEN(.recent, RECENT, 'W')
  146.         CALL writeln(.recent, SN)
  147.         CALL CLOSE(.recent)
  148. .skip2:
  149.         CI = 0
  150.         STATUS RESTNAME
  151.         FN = RESULT
  152.         SIGNAL .main
  153.  
  154. .stemp:
  155. temp=max(lastpos(':',SN),lastpos('/',SN))+1
  156. temp=substr(SN,temp)
  157. temp=insert('T:',temp)
  158. SAVE AS temp 1
  159. IF RESULT = 0 THEN SIGNAL .exit
  160.     CI = 0
  161.     SN=temp
  162.     SIGNAL .main
  163.  
  164. SYNTAX:
  165. .exit:
  166. halt:
  167. break_c:
  168. ADDRESS VALUE ADR
  169. 'UNLOCKGUI'
  170. TAB SIZE 7
  171. exit retc
  172.